// pages/profile/profile.js
// 引入API工具
const api = require('../../utils/api.js')
// 引入日期格式化工具
const util = require('../../utils/util.js')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    activeTab: 'ongoing', // 'ongoing' 或 'history'
    creditScore: 100,
    userInfo: null,
    hasUserInfo: false,
    orderList: [],
    loading: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getUserInfo();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getUserInfo();
    this.loadOrders();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.getUserInfo();
    this.loadOrders();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 获取用户信息
  getUserInfo() {
    try {
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.setData({
          userInfo: userInfo,
          hasUserInfo: true
        });
        
        // 获取用户最新信用分
        this.loadCreditScore();
      }
    } catch (e) {
      console.error('获取用户信息失败', e);
    }
  },
  
  // 加载用户信用分
  loadCreditScore() {
    if (!this.data.hasUserInfo) return;
    
    // 这里通过登录接口刷新用户信息
    api.login(this.data.userInfo)
      .then(res => {
        const { creditScore } = res.data.userInfo;
        this.setData({ creditScore });
        
        // 更新本地存储的信用分
        wx.setStorageSync('creditScore', creditScore);
      })
      .catch(err => {
        console.error('获取信用分失败', err);
      });
  },

  // 登录
  login() {
    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        const userInfo = res.userInfo;
        
        // 调用登录接口
        api.login(userInfo)
          .then(result => {
            // 更新用户信息和信用分
            const { creditScore } = result.data.userInfo;
            userInfo.creditScore = creditScore;
            
            // 存储用户信息
            wx.setStorageSync('userInfo', userInfo);
            wx.setStorageSync('creditScore', creditScore);
            
            this.setData({
              userInfo: userInfo,
              hasUserInfo: true,
              creditScore: creditScore
            });
            
            // 加载订单
            this.loadOrders();
          })
          .catch(err => {
            console.error('登录失败', err);
          });
      },
      fail: (err) => {
        console.error('获取用户信息失败', err);
        wx.showToast({
          title: '登录失败',
          icon: 'error'
        });
      }
    });
  },

  // 切换标签页
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab;
    this.setData({
      activeTab: tab
    });
    
    this.loadOrders();
  },
  
  // 加载订单列表
  loadOrders() {
    if (!this.data.hasUserInfo) return;
    
    const { activeTab } = this.data;
    this.setData({ loading: true });
    
    api.getOrderList(activeTab)
      .then(res => {
        // 格式化日期
        const orderList = (res.data || []).map(order => {
          return {
            ...order,
            borrowTimeFormat: util.formatTime(order.borrowTime),
            returnDeadlineFormat: util.formatTime(order.returnDeadline),
            actualReturnTimeFormat: order.actualReturnTime ? util.formatTime(order.actualReturnTime) : ''
          };
        });
        
        this.setData({
          orderList
        });
      })
      .catch(err => {
        console.error('获取订单列表失败', err);
      })
      .finally(() => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
      });
  },

  // 退出登录
  logout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除用户信息
          wx.removeStorageSync('userInfo');
          wx.removeStorageSync('creditScore');
          
          // 更新页面状态
          this.setData({
            userInfo: null,
            hasUserInfo: false,
            orderList: []
          });
          
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          });
        }
      }
    });
  },

  // 归还装备
  returnEquipment(e) {
    const orderId = e.currentTarget.dataset.id;
    
    wx.showModal({
      title: '确认归还',
      content: '请选择装备状态',
      showCancel: true,
      cancelText: '已损坏',
      confirmText: '完好',
      success: (res) => {
        const isDamaged = !res.confirm; // 如果点击"已损坏"按钮，则isDamaged为true
        
        if (res.confirm || res.cancel) { // 无论点击哪个按钮都继续
          // 调用归还接口
          api.returnEquipment(orderId, isDamaged)
            .then(res => {
              const { creditChange, isOverdue, isDamaged } = res.data;
              
              let toastTitle = '归还成功';
              if (isDamaged && isOverdue) {
                toastTitle = `归还成功，扣分${Math.abs(creditChange)}`;
              } else if (isDamaged) {
                toastTitle = '归还成功，扣30分';
              } else if (isOverdue) {
                toastTitle = `归还成功，扣${Math.abs(creditChange)}分`;
              } else {
                toastTitle = '归还成功，加1分';
              }
              
              wx.showToast({
                title: toastTitle,
                icon: 'success',
                duration: 2000
              });
              
              // 刷新订单列表和信用分
              setTimeout(() => {
                this.loadOrders();
                this.loadCreditScore();
              }, 2000);
            })
            .catch(err => {
              console.error('归还失败', err);
            });
        }
      }
    });
  },

  // 跳转到管理员入口
  navigateToAdmin() {
    wx.navigateTo({
      url: '/pages/admin/login/login'
    });
  },
})